package com.demo904_水果成篮;
/**
 * 把那个指针回退计算重复连续最多的元素的个数, 进行一个优化~
 */

import java.util.ArrayList;

public class Solution2 {
    public static void main(String[] args) {
        int[] ints = {0,1,6,6,4,4,6};
        int i = totalFruit(ints);
        System.out.println(i);
    }

    public static int totalFruit(int[] fruits) {
        ArrayList<Integer> list = new ArrayList<>();
        int max = 0;
        int count = 0;
        int repeatCount = 1;
        for (int i = 0; i < fruits.length; i++) {
            if (list.size() < 2) {
                // 如果不包含该元素,那么直接放进去, 如果已经存在那么直接数量 + 1
                if (!list.contains(fruits[i])){
                    list.add(fruits[i]);
                }

                count++;

                if (i-1>=0&&fruits[i]==fruits[i-1]){
                    repeatCount++;
                }else {
                    repeatCount=1;
                }

            } else {
                // 当种类已经是2的时候, 需要判断当前要添加的元素,是否在篮子中已经存在,
                // 如果存在, 那么直接数量加一;  如果不存在那么需要把不是上一个元素的元素移除掉, 然后把当前元素加进去,并且重新计算count值
                if (list.contains(fruits[i])) {
                    count++;

                    if (i-1>=0&&fruits[i]==fruits[i-1]){
                        repeatCount++;
                    }else {
                        repeatCount=1;
                    }
                } else {
                    // 收集结果
                    max = max == 0 ? count : Math.max(max, count);
                    // 移除掉非 i-1 的下标的元素
                    int notRemove = fruits[i - 1];
                    int index = list.indexOf(notRemove);

                    list.remove(1 - index);
                    // 回退计算 i-1 下标的重复元素个数
                    count=repeatCount;

                    repeatCount=1;
                    // 数量 count + 1 , 加的是 这个 当前要加入的值
                    list.add(fruits[i]);
                    count++;
                }
            }

        }

        return max == 0 ? count : Math.max(max, count);
    }
}
